<?php

require_once dirname(__FILE__).'/../lib/fixtureGeneratorConfiguration.class.php';
require_once dirname(__FILE__).'/../lib/fixtureGeneratorHelper.class.php';

/**
 * fixture actions.
 *
 * @package    prode
 * @subpackage fixture
 * @author     Your name here
 * @version    SVN: $Id: actions.class.php 12474 2008-10-31 10:41:27Z fabien $
 */
class fixtureActions extends autoFixtureActions
{
    public function executeEdit(sfWebRequest $request){
        parent::executeEdit($request);
        $this->form->EquiposQueNoEstanEnFixture = equipoPeer::getEquiposQueNoEstanEnFixture($this->fixture->getId());
        $this->form->EquiposDelFixture = equipoPeer::getEquiposDelFixture($this->fixture->getId());
    }
    public function executeAgregar_equipo(sfWebRequest $request){
     //Aqui hago la llamada a la funcion para agregar equipos al detallefixture
        $fixture_id = $request->getParameter('fixture_id');
        $equipo_id  = $request->getParameter('equipo_id');
        Detallefixture::setAgregarEquipo($fixture_id, $equipo_id);
        $this->form = new FixtureForm(FixturePeer::retrieveByPK($fixture_id));
        $this->form->EquiposQueNoEstanEnFixture = equipoPeer::getEquiposQueNoEstanEnFixture($fixture_id);
        $this->form->EquiposDelFixture = equipoPeer::getEquiposDelFixture($fixture_id);
        return $this->renderpartial('form_footer',array('form' => $this->form));
    }
    //ivan
    //funcion para ver mis apuestas
    public function executeListVerApuestas(sfWebRequest $request)
    {
        if(!$this->getUser()->getGuardUser()){
            $this->getUser()->setFlash('error', ' Debe logearse para ver sus apuestas. ');
            $this->redirect('@fixture');
        }
        $criteria= new Criteria();
         $criteria->add(ApuestaPeer::SF_GUARD_USER,$this->getUser()->getGuardUser()->getId());
        $Lista_apuestas=ApuestaPeer::doSelect($criteria);           //si el usuario no realizó apuestas,
        if(!$Lista_apuestas){                                       //redireccionar a la vista principal.
            $this->getUser()->setFlash('error', 'Usted todavia no realizo ninguna apuesta. ');
            $this->redirect('@fixture');
        }
        else
            $this->Lista_apuestas = $Lista_apuestas;
    }

       public function executeDetalleApuestas(sfWebRequest $request)
    {
        $apuesta = ApuestaPeer::retrieveByPK($request->getParameter('id'));
        $this->fixture = $apuesta->getFixture();;
        $this->form = new FixtureForm($this->fixture);  //a la vista.!
        $this->form->detalleapuestas = $apuesta->getDetalleapuestas();
    }//C+P para ver detalles de apuestas

    public function executeBorrar_detalle(sfWebRequest $request){
        $detallefixture_id = $request->getParameter('detallefixture_id');
        try{
            Detallefixture::deleteEquipoDelFixture($detallefixture_id);
            $this->fixture = FixturePeer::retrieveByPK($request->getParameter('fixture_id'));
            $this->form = new FixtureForm($this->fixture);
            $this->form->EquiposQueNoEstanEnFixture = equipoPeer::getEquiposQueNoEstanEnFixture($this->fixture->getId());
            $this->form->EquiposDelFixture = equipoPeer::getEquiposDelFixture($this->fixture->getId());
            return $this->renderpartial('form_footer',array('form' => $this->form));
        }
        catch (sfException $e){
            $this->getResponse()->setStatusCode(404);
            return $this->rendertext($e->getMessage());
        }
    }
    //pablo
    public function executeListApostar(sfWebRequest $request){
        /*
        si está ACTIVO{
          si el tiempo de apuesta no a sido superado{
            ver si apostador ya aposto a este fixture
               traer apuesta
            si no
               instancia APUESTA, y setea sf_guard_user
            foreach de detalleFixture{
                instancia detalleApuesta, y setea detalleFixture_id
            }
            tuplasDetalleApuestas = consulta los detalleApuesta(para esta apuesta en particular)

            muestra en Success, las TuplasDetalleApuestas, con los registros del fixture
            debe aparecer 3 radio buton por cada partido (por defecto todos los empates)
            SAVE, debe actualizar los goles para cada partido
            gana=1-0, empata=0-0, pierde=0-1
          }
        }
        */
        /*
         * Marcelo
         * Si se quiere apostar en un fixture y existe un fixture anterior que aun esta activo se bloquea dicha apuesta
         * Solo se puede apostar en el primer fixture activo para la convinacion
         * torneo anho temporada
         */
        $id = $request->getParameter('id');
        $fixture = FixturePeer::retrieveByPK($id);
        if($fixture)
            if($fixture->getAnteriorEstaActivo()){
                $this->getUser()->setFlash('error', ' Hubo un error, Existe un Fixture anterior que aun esta Activo, por lo tanto no se puede apostar aun en el fixture seleccionado');
                $this->redirect('@fixture');    
            }
            else{
                if(sfContext::getInstance()->getUser()->isAuthenticated()){     //verifico si está autenticado
                        // y verifico si el usuario ya apostó a un fixture en particular.
                        $apuesta = ApuestaPeer::doSelectApuestaFixture($this->getUser()->getGuardUser()->getId(), $fixture->getId());
                        if(!$apuesta){                      //si no apostó, instanciar una apuesta.
                            if($fixture->getActivo()){                              //verifico si el fixture está activo
                               if($fixture->getVerificarTiempoLimiteDeApuesta()){  //y si para este torneo a llegado al tiempo limite de apuestas
                                    $apuesta = new Apuesta();
                                    $apuesta->setSfGuardUser($this->getUser()->getGuardUser()->getId());
                                    $apuesta->save();
                                    $apuesta->setCrearDetalleApuesta($fixture);
                                }
                                else{
                                    $this->getUser()->setFlash('error', ' A llegado al tiempo límite de apuestas. El Fixture se a desactivado');
                                    $this->redirect('@fixture');
                                }
                            }
                            else{
                                $this->getUser()->setFlash('error', ' El fixture no está activo. ');
                                $this->redirect('@fixture');
                            }
                        }
                        $this->fixture = $fixture;                      //obtengo los datos de las apuestas, para enviar
                        $this->form = new FixtureForm($this->fixture);  //a la vista.!
                        $this->form->detalleapuestas = $apuesta->getDetalleapuestas();
                }
                else{
                    $this->getUser()->setFlash('error', ' Hubo un error, verifique si está logeado. ');
                    $this->redirect('@fixture');
                }
            }
        else{
            $this->getUser()->setFlash('error', ' A ocurrido un error. ');
            $this->redirect('@fixture');
        }
    }

    public function executeConfirmar_detalle(sfWebRequest $request){
        $detallefixture_id = $request->getParameter('detallefixture_id');
        $fecha             = $request->getParameter('fecha');
        $hora              = $request->getParameter('hora');
        try {
            Detallefixture::setFechaEncuentro($detallefixture_id, $fecha, $hora);
            return $this->rendertext('Fecha Confirmada');
        }
        catch (sfException $e){
            $this->getResponse()->setStatusCode(404);
            return $this->rendertext($e->getMessage());
        }

    }

    public function executeListResultados(sfWebRequest $request){
        $fixture_id = $request->getParameter('id');
        $this->fixture =  FixturePeer::retrieveByPK($fixture_id);
        $this->EquiposDelFixture = equipoPeer::getEquiposDelFixture($fixture_id);
    }

    //pablo
    /**
     *  Funcion que es llamada desde la vista fixture/apuesta, al presionar CONFIRMAR.
     * Actualiza una apuesta, e instancia el pozo y detallePozo con los datos necesarios.
     * @param sfWebRequest $request
     * @return <type>
     */
    public function executeSetActualizarApuestas(sfWebRequest $request)
    {
        $apuesta_id = $request->getParameter('apuesta_id');
        $radio = $request->getParameter('radio');
        $fixture_id = $request->getParameter('fixture_id');

        $fixture = FixturePeer::retrieveByPK($fixture_id);
        if($fixture->getActivo()){                                  //verifico si el fixture está activo
            if($fixture->getVerificarTiempoLimiteDeApuesta()){    //y si para este torneo a llegado al tiempo limite de apuestas
                reset($radio);
                $apuesta = ApuestaPeer::retrieveByPK($apuesta_id);      //obtengo la apuesta realizada
                $detalleapuestas = $apuesta->getDetalleapuestas();      //y el detalle de las apuestas.
                foreach($detalleapuestas as $tupla){            //instancio cada detalle de apuesta, y actualizo las apuestas con lo que
                    $temp = each($radio);                       //se colocó en los botones de opcion en la vista.
                    if($temp[1]==1){$local=1;$visitante=0;}
                    elseif($temp[1]==2){$local=0;$visitante=0;}
                    elseif($temp[1]==3){$local=0;$visitante=1;}
                    else {$local=0;$visitante=0;}

                    $tupla->setGolesLocal($local);              //actualizo los cambios en la apuesta Realizada
                    $tupla->setGolesVisitante($visitante);
                    $tupla->save();                             //y guardo.
                }
                PozoPeer::doActualizarPozo($fixture, $apuesta); //crea y actualiza el pozo y detallePozo
                $this->form = new FixtureForm($this->fixture);                  //obtengo los datos de las apuestas, para enviar
                $this->form->detalleapuestas = $apuesta->getDetalleapuestas();  //a la Vista
                return $this->renderPartial('fixture/apuesta', array('form' => $this->form));
            }
            else{
                $this->getResponse()->setStatusCode(404);
                return $this->rendertext('Atención, A llegado al tiempo límite de modificación de apuestas.');
            }
        }
        else{                                                       //si no está activo, senhalizo error.
            $this->getResponse()->setStatusCode(404);
            return $this->rendertext('Error, El fixture no está activo.');
        }
    }
    //Marcelo
    protected function processForm(sfWebRequest $request, sfForm $form)
  {
    //Funcion para Pasar de No finalizado a Finalizado, y de No Activo a Activo al cargar todos los detalles
    // Si para un torneo se cargaron todos los equipos, y se fijaron las fechas
    // Entonces se puede pasar a finalizado y a Activo
    // Chequear que no haya equipos en equipos que no son del fixture,
    // Chequear las Fechas de Equipos del Fixture
    // Si pasa todos los chequeos setear los flag



    $form->bind($request->getParameter($form->getName()), $request->getFiles($form->getName()));
    if ($form->isValid())
    {
      $notice = $form->getObject()->isNew() ? 'The item was created successfully.' : 'The item was updated successfully.';

      $fixture = $form->save();
      //Agregado para setear los Flag
      $equiposNoEnFixture = EquipoPeer::getEquiposQueNoEstanEnFixture($fixture->getId());
      if(!$equiposNoEnFixture){
          $setear = true;
          $equiposFixture = equipoPeer::getEquiposdelFixture($fixture->getId());
          foreach($equiposFixture as $DetalleFixture){
             $fecha =  $DetalleFixture->getFecha();
             if (!$fecha)
                 if ($DetalleFixture->getVisitanteId()){
                     $setear = false;
                     break;
             }
          }
          if ($setear){
              $fixture->setActivo(true);$fixture->setFinalizado(true);$fixture->save();
          }



      }
      //fin
      $this->dispatcher->notify(new sfEvent($this, 'admin.save_object', array('object' => $fixture)));

      if ($request->hasParameter('_save_and_add'))
      {
        $this->getUser()->setFlash('notice', $notice.' You can add another one below.');

        $this->redirect('@fixture_new');
      }
      else
      {
        $this->getUser()->setFlash('notice', $notice);

        $this->redirect(array('sf_route' => 'fixture_edit', 'sf_subject' => $fixture));
      }
    }
    else
    {
      $this->getUser()->setFlash('error', 'The item has not been saved due to some errors.', false);
    }
  }

  public function executeDoActualizarResultados(sfWebRequest $request){
         $goleslocales    = $request->getParameter('goleslocal');
         $golesvisitantes = $request->getParameter('golesvisitante');
         $ids             = $request->getParameter('id');
         $e = 0;
         //Verificar si se puede crear los resultados

         //Fin de los Cambios

         foreach($ids as $id){
             $detallefixture = DetallefixturePeer::retrieveByPK($id);
             if (isset($goleslocales[$e])){
                $detallefixture->setGolesLocal($goleslocales[$e]);
                $detallefixture->setGolesVisitante($golesvisitantes[$e]);
                $detallefixture->save();
             }
             $e++;
         }
         $i =   fixture::doBuscarGanadores($detallefixture->getFixtureId());
         if ($i)
            return $this->rendertext('Cargado Con Exito, Total de Apuesta Acertadas '. $i);
         else
            return $this->rendertext('Los ganadores ya se guardaron previamente') ;
  }

  public function executeIndex(sfWebRequest $request)
  {
      parent::executeIndex($request);
      $criteria = new Criteria();
      $criteria->setLimit(5);
      $criteria->addDescendingOrderByColumn(DetalleganadoresPeer::CREATED_AT);
      $ganadores= DetalleganadoresPeer::doSelect($criteria);
      if($ganadores)
        $this->ganadores = $ganadores;
      else
        $this->ganadores = null;

      $criteria2 = new Criteria();
      $criteria2->setLimit(5);
      $criteria2->addDescendingOrderByColumn(sfGuardUserPeer::LAST_LOGIN);
      $ultimoslogeados = sfGuardUserPeer::doSelect($criteria2);
      if($ultimoslogeados)
          $this->ultimoslogeados = $ultimoslogeados;
      else
          $this->ultimoslogeados = null;
      
  }
  public function executeRegistro(sfWebRequest $request){
      $this->form = new registroForm();
      if ($request->isMethod('post')){
         $this->form->bind($request->getParameter('sf_guard_user'));
         if ($this->form->isValid()){
             $this->form->save();
             $this->getUser()->signIn($this->form->getObject());
             $this->redirect('@homepage');
         }
         else{
              $this->getUser()->setFlash('error', 'A registrado datos invalidos', false);
             $this->setTemplate('registro');
         }
       }
  }

}
